home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / weyl / weyl_lsp.lha / rational-numbers.lisp < prev    next >
Text File  |  1991-10-24  |  2KB  |  61 lines

  1. ;;; -*- Mode:Lisp; Package:Weyli; Base:10; Lowercase:T; Syntax:Common-Lisp -*-
  2. ;;; ===========================================================================
  3. ;;;                  Rational Numbers
  4. ;;; ===========================================================================
  5. ;;; (c) Copyright 1989, 1991 Cornell University
  6.  
  7. ;;; $Id: rational-numbers.lisp,v 2.6 1991/10/24 19:27:40 rz Exp $
  8.  
  9. (in-package "WEYLI")
  10.  
  11. (define-domain-element-classes rational-numbers
  12.     rational-number)
  13.  
  14. (defmethod print-object ((d rational-numbers) stream)
  15.   #+Genera
  16.   (format stream "~'bQ~")
  17.   #-Genera
  18.   (princ "Q"  stream))
  19.  
  20. (define-domain-creator rational-numbers ()
  21.   (make-instance 'rational-numbers)
  22.   :predicate (lambda (d) (eql (class-name (class-of d)) 'rational-numbers)))
  23.  
  24. (define-domain-creator quotient-field ((ring rational-integers))
  25.   (make-rational-numbers))
  26.  
  27. (defmethod get-quotient-field ((ring rational-integers))
  28.   (get-rational-numbers))
  29.  
  30. (defmethod make-quotient-element ((qf rational-numbers) numerator denominator)
  31.   (make-instance 'rational-number :domain qf :numerator numerator :denominator denominator))
  32.  
  33. (defmethod print-object ((ratfun rational-number) stream)
  34.   (with-numerator-and-denominator (numerator denominator) ratfun
  35.     (cond ((1? denominator)
  36.        (prin1 numerator stream))
  37.       (t (prin1 numerator stream)
  38.          (princ "/" stream)
  39.          (prin1 denominator stream)))))
  40.  
  41. (defmethod numerator ((r rational-number))
  42.   (qo-numerator r))
  43.  
  44. (defmethod denominator ((r rational-number))
  45.   (qo-denominator r))
  46.  
  47. (defmethod > ((x rational-number) (y rational-number))
  48.   (> (* (qo-numerator x) (qo-denominator y))
  49.      (* (qo-numerator y) (qo-denominator x))))
  50.  
  51. (defmethod < ((x rational-number) (y rational-number))
  52.   (< (* (qo-numerator x) (qo-denominator y))
  53.      (* (qo-numerator y) (qo-denominator x))))
  54.  
  55. (defmethod abs ((x rational-number))
  56.   (make-instance 'rational-number
  57.          :domain (domain-of x)
  58.          :numerator (abs (qo-numerator x))     
  59.          :denominator (qo-denominator x)))
  60.  
  61.